import os
from audioop import reverse

import datedays as datedays
import matplotlib.pyplot as plt
import numpy as np
from dateutil.utils import today
from numpy import sort
from openpyxl import Workbook, load_workbook
# y轴百分比、小数处理包
from matplotlib import ticker

# 显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']

wb = Workbook()
wb = load_workbook('直分图表数据py.xlsx', data_only=True)
sheet = wb['Sheet1']

DATE = [str(sheet['AC3'].value)[5:10], str(sheet['Y3'].value)[5:10], str(sheet['U3'].value)[5:10],
        str(sheet['Q3'].value)[5:10], str(sheet['M3'].value)[5:10],
        str(sheet['I3'].value)[5:10], str(sheet['E3'].value)[5:10]]
ZF_NUM1 = [float('%.2f' % (sheet['AD32'].value / 10000)), float('%.2f' % (sheet['Z32'].value / 10000)),
           float('%.2f' % (sheet['V32'].value / 10000)), float('%.2f' % (sheet['R32'].value / 10000)),
           float('%.2f' % (sheet['N32'].value / 10000)),
           float('%.2f' % (sheet['J32'].value / 10000)),
           float('%.2f' % (sheet['F32'].value / 10000))]
ZF_RATE1 = [sheet['AE32'].value, sheet['AA32'].value, sheet['W32'].value, sheet['S32'].value,
            sheet['O32'].value,
            sheet['K32'].value,
            sheet['G32'].value]
WC_RATE1 = [sheet['AF32'].value, sheet['AB32'].value, sheet['X32'].value, sheet['T32'].value,
            sheet['P32'].value,
            sheet['L32'].value,
            sheet['H32'].value]

ZF_NUM2 = [float('%.2f' % (sheet['AD73'].value / 10000)), float('%.2f' % (sheet['Z73'].value / 10000)),
           float('%.2f' % (sheet['V73'].value / 10000)), float('%.2f' % (sheet['R73'].value / 10000)),
           float('%.2f' % (sheet['N73'].value / 10000)),
           float('%.2f' % (sheet['J73'].value / 10000)),
           float('%.2f' % (sheet['F73'].value / 10000))]
ZF_RATE2 = [sheet['AE73'].value, sheet['AA73'].value, sheet['W73'].value, sheet['S73'].value,
            sheet['O73'].value,
            sheet['K73'].value,
            sheet['G73'].value]
WC_RATE2 = [sheet['AF73'].value, sheet['AB73'].value, sheet['X73'].value, sheet['T73'].value,
            sheet['P73'].value,
            sheet['L73'].value,
            sheet['H73'].value]

ZF_NUM3 = [float('%.2f' % (sheet['AD80'].value / 10000)), float('%.2f' % (sheet['Z80'].value / 10000)),
           float('%.2f' % (sheet['V80'].value / 10000)), float('%.2f' % (sheet['R80'].value / 10000)),
           float('%.2f' % (sheet['N80'].value / 10000)),
           float('%.2f' % (sheet['J80'].value / 10000)),
           float('%.2f' % (sheet['F80'].value / 10000))]
ZF_RATE3 = [sheet['AE80'].value, sheet['AA80'].value, sheet['W80'].value, sheet['S80'].value,
            sheet['O80'].value,
            sheet['K80'].value,
            sheet['G80'].value]
WC_RATE3 = [sheet['AF80'].value, sheet['AB80'].value, sheet['X80'].value, sheet['T80'].value,
            sheet['P80'].value,
            sheet['L80'].value,
            sheet['H80'].value]

x1 = np.array(DATE)  # x_日期
y1 = np.array(ZF_NUM1)  # 华东直分量
y2 = np.array(ZF_RATE1)  # 华东直分率
y3 = np.array(WC_RATE1)  # 华东完成率

y4 = np.array(ZF_NUM2)  # 华中直分量
y5 = np.array(ZF_RATE2)  # 华中直分率
y6 = np.array(WC_RATE2)  # 华中完成率

y7 = np.array(ZF_NUM3)  # 东北直分量
y8 = np.array(ZF_RATE3)  # 东北直分率
y9 = np.array(WC_RATE3)  # 东北完成率

fig = plt.figure(figsize=(12, 8))  # 创建一个figure；参数figsize=(10,5)，设置figure长宽
plt.suptitle(str(sheet['E3'].value)[5:10][0:2]+'月'+str(sheet['E3'].value)[5:10][3:5]+'日'+'大区直分进度（一）', fontsize=18)

ax1 = fig.add_subplot(222)  # 共（1*1）个子图，即本身
# 1.华东直分量
plt.bar(x1, y1, color='#00b050', width=0.5, label='直分量')  # 绘制直分量直方图
plt.title('华东近七日直分情况（指标229.2W）')
# plt.xlabel('日期')
plt.ylabel('直分量（万）')
# 根据近七日最大直分量确定y轴取值范围极限
y1_max = sort(y1)[6]
y1_lim = 229.2
# 根据近七日最大完成率确定y轴取值范围极限
y3_max = sort(y3)[6]
y3_lim = 1
plt.ylim((0, y1_lim))  # y轴取值范围
for i in range(0, 7):
    # 图表数据设置(x位置,y位置,值,字体大小,垂直格式,水平格式)
    plt.text(x1[i], y1[i], y1[i], fontsize=10, verticalalignment='bottom',
             horizontalalignment='center')
plt.plot(x1, y1, ':r')
# 2.华东直分占比
ax2 = ax1.twinx()  # 第二张图与第一张图共用x轴
ax2.plot(x1, y2, 'o:b', label='直分占比')  # 绘制直分率折线图
# 设置y轴取值0到1，刻度为0.2
y_ticks = np.arange(0, y3_lim, 0.2)
plt.yticks(y_ticks)
# 把y轴的float数据转为百分比形式，xmax最大为1（100%），decimals显示小数点后0位
ax2.yaxis.set_major_formatter(ticker.PercentFormatter(xmax=1, decimals=0))
# 循环显示各个y轴的数据值
for i in range(0, 7):
    plt.text(x1[i], y2[i], '%.2f%%' % (y2[i] * 100), fontsize=10, verticalalignment='bottom',
             horizontalalignment='center')
# 3.华东完成率
ax3 = ax1.twinx()
ax3.plot(x1, y3, 'o:y', label='完成率')
fig.legend(loc='lower center', bbox_transform=ax1.transAxes, ncol=3)
y_ticks = np.arange(0, y3_lim, 0.2)
plt.yticks(y_ticks)
ax3.yaxis.set_major_formatter(ticker.PercentFormatter(xmax=1, decimals=0))
for i in range(0, 7):
    plt.text(x1[i], y3[i], '%.2f%%' % (y3[i] * 100), fontsize=10, verticalalignment='bottom',
             horizontalalignment='center')
# -------------------------------------------------------------------------------------------------------------------------
ax1 = fig.add_subplot(223)
# 1.华中直分量
plt.bar(x1, y4, color='#00b050', width=0.5, label='直分量')  # 绘制直分量直方图
plt.title('华中近七日直分情况（指标64.0W）')
plt.xlabel('日期')
plt.ylabel('直分量（万）')
# 根据近七日最大直分量确定y轴取值范围极限
y4_max = sort(y4)[6]
y4_lim = 64
# 根据近七日最大完成率确定y轴取值范围极限
y6_max = sort(y6)[6]
y6_lim = 1
plt.ylim((0, y4_lim))  # y轴取值范围
for i in range(0, 7):
    # 图表数据设置(x位置,y位置,值,字体大小,垂直格式,水平格式)
    plt.text(x1[i], y4[i], y4[i], fontsize=10, verticalalignment='bottom',
             horizontalalignment='center')
plt.plot(x1, y4, ':r')
# 2.华中直分占比
ax2 = ax1.twinx()  # 第二张图与第一张图共用x轴
ax2.plot(x1, y5, 'o:b', label='直分占比')  # 绘制直分率折线图
# 设置y轴取值0到1，刻度为0.2
y_ticks = np.arange(0, y6_lim, 0.2)
plt.yticks(y_ticks)
# 把y轴的float数据转为百分比形式，xmax最大为1（100%），decimals显示小数点后0位
ax2.yaxis.set_major_formatter(ticker.PercentFormatter(xmax=1, decimals=0))
# 循环显示各个y轴的数据值
for i in range(0, 7):
    plt.text(x1[i], y5[i], '%.2f%%' % (y5[i] * 100), fontsize=10, verticalalignment='bottom',
             horizontalalignment='center')
# 3.华中完成率
ax3 = ax1.twinx()
ax3.plot(x1, y6, 'o:y', label='完成率')
y_ticks = np.arange(0, y6_lim, 0.2)
plt.yticks(y_ticks)
ax3.yaxis.set_major_formatter(ticker.PercentFormatter(xmax=1, decimals=0))
for i in range(0, 7):
    plt.text(x1[i], y6[i], '%.2f%%' % (y6[i] * 100), fontsize=10, verticalalignment='bottom',
             horizontalalignment='center')
# -------------------------------------------------------------------------------------------------------------------------
ax1 = fig.add_subplot(224)
# 1.东北直分量
plt.bar(x1, y7, color='#00b050', width=0.5, label='直分量')  # 绘制直分量直方图
plt.title('东北近七日直分情况（指标55.0W）')
plt.xlabel('日期')
plt.ylabel('直分量（万）')
# 根据近七日最大直分量确定y轴取值范围极限
y7_max = sort(y7)[6]
y7_lim = y7_max*1.3
# 根据近七日最大完成率确定y轴取值范围极限
y9_max = sort(y9)[6]
y9_lim = y9_max*1.3
plt.ylim((0, y7_lim))  # y轴取值范围
for i in range(0, 7):
    # 图表数据设置(x位置,y位置,值,字体大小,垂直格式,水平格式)
    plt.text(x1[i], y7[i], y7[i], fontsize=10, verticalalignment='bottom',
             horizontalalignment='center')
plt.plot(x1, y7, ':r')
# 2.东北直分占比
ax2 = ax1.twinx()  # 第二张图与第一张图共用x轴
ax2.plot(x1, y8, 'o:b', label='直分占比')  # 绘制直分率折线图
# 设置y轴取值0到1，刻度为0.2
y_ticks = np.arange(0, y9_lim, 0.2)
plt.yticks(y_ticks)
# 把y轴的float数据转为百分比形式，xmax最大为1（100%），decimals显示小数点后0位
ax2.yaxis.set_major_formatter(ticker.PercentFormatter(xmax=1, decimals=0))
# 循环显示各个y轴的数据值
for i in range(0, 7):
    plt.text(x1[i], y8[i], '%.2f%%' % (y8[i] * 100), fontsize=10, verticalalignment='bottom',
             horizontalalignment='center')
# 3.东北完成率
ax3 = ax1.twinx()
ax3.plot(x1, y9, 'o:y', label='完成率')
y_ticks = np.arange(0, y9_lim, 0.2)
plt.yticks(y_ticks)
ax3.yaxis.set_major_formatter(ticker.PercentFormatter(xmax=1, decimals=0))
for i in range(0, 7):
    plt.text(x1[i], y9[i], '%.2f%%' % (y9[i] * 100), fontsize=10, verticalalignment='bottom',
             horizontalalignment='center')

# 大区排名
# -------------------------------------------------------------------------------------------------------------------------
WCL_LIST = [sheet['H5'].value, sheet['H24'].value, sheet['H32'].value, sheet['H64'].value, sheet['H73'].value,
            sheet['H80'].value, sheet['H86'].value]
WCL_DICT = {sheet['H5'].value: '华南', sheet['H24'].value: '西南', sheet['H32'].value: '华东', sheet['H64'].value: '华北',
            sheet['H73'].value: '华中', sheet['H80'].value: '东北', sheet['H86'].value: '西北'}
ax1 = fig.add_subplot(221)
x1 = ['一', '二', '三', '四', '五', '六', '七']
y1 = sorted(WCL_LIST)
y1.reverse()
# 水平线
plt.axhline(1, color='r', linestyle='--', linewidth='0.7', label='目标值', )
plt.bar(x1, y1, color='orange', width=0.55, label='完成率', )
plt.legend(loc='upper right')
yesterday = str(datedays.getyesterday())
plt.title(yesterday[5:7]+'月'+yesterday[8:10]+'日'+'全国大区完成率排名' )
# plt.xlabel('名次')
plt.ylabel('完成率')
# 2022-10-25
plt.ylim((0, 1.7))  # y轴取值范围
# 把y轴的float数据转为百分比形式，xmax最大为1（100%），decimals显示小数点后0位
ax1.yaxis.set_major_formatter(ticker.PercentFormatter(xmax=1, decimals=0))

# 循环显示各个y轴的数据值
for i in range(0, 7):
    plt.text(x1[i], y1[i], str(WCL_DICT[y1[i]]), fontsize=10, verticalalignment='bottom',
             horizontalalignment='center')
for i in range(0, 7):
    plt.text(x1[i], y1[i], '%.f%%' % (y1[i] * 100), fontsize=10, verticalalignment='top',
             horizontalalignment='center')

plt.show()
# os.mkdir('D:\\Desktop\\直分图表\\直分量\\2023'+str(today())[5:7] + str(today())[8:10])
# print('新建文件夹：D:\\Desktop\\直分图表\\直分量\\2023'+str(today())[5:7] + str(today())[8:10])
# plt.savefig(fname='D:\\Desktop\\直分图表\\直分量\\2023'+str(today())[5:7] + str(today())[8:10]+'\\01-全国华东华中东北'+str(today())[5:7]+str(today())[8:10]+'.png')
# print('01全国华东华中东北'+str(today())[5:7]+str(today())[8:10]+'.png'+'已保存')
# os.system('python 直方图（华南-西南-华北-西北）.py')
